package com.example.transaction.config;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
public class TransactionConfig {
    /**
     *  PROPAGATION_NESTED如果一个活动的事务存在，则运行在一个嵌套的事务中. 如果没有活动事务,
     * 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。这是一个嵌套事务,使用JDBC 3.0驱动时,
     * 仅仅支持DataSourceTransactionManager作为事务管理器。需要JDBC 驱动的java.sql.Savepoint类。
     * 有一些JTA的事务管理器实现可能也提供了同样的功能。使用PROPAGATION_NESTED，
     * 还需要把PlatformTransactionManager的nestedTransactionAllowed属性设为true;
     * 而 nestedTransactionAllowed属性值默认为false;
     * @param dataSourceTransactionManager
     * @return
     */
    @Bean
    public DataSourceTransactionManager transactionManager(DataSourceTransactionManager dataSourceTransactionManager){
        dataSourceTransactionManager.setNestedTransactionAllowed(true);
        return dataSourceTransactionManager;
    }
}
